package com.senmin.aPrinciple.a5InterfaceSegregationPrinciple.tdemo1;

import java.util.ArrayList;
import java.util.List;

/**
 * @className: demeter1
 * @author: xpj
 * @create: 2021/6/5
 * @description: 使用迪米特法则进行改进
 *  案例：有一个学校，下属在各个学院和总部，现要求打印出学校总部员工ID和学院员工ID
 */
public class demo1 {
    public static void main(String[] args) {
        A a = new A();
        a.depend1(new B()); //A类通过接口去依赖B类
        a.depend2(new B()); //A类通过接口去依赖B类
        a.depend3(new B()); //A类通过接口去依赖B类
    }
}

//接口1
interface Interface1 {
    void operation1();
}

//接口2
interface Interface2 {
    void operation2();
    void operation3();
}

//接口3
interface Interface3 {
    void operation4();
    void operation5();
}



class B implements Interface1,Interface2 {
    @Override
    public void operation1(){
        System.out.println("B类实现了operation1");
    }
    @Override
    public void operation2(){
        System.out.println("B类实现了operation2");
    }
    @Override
    public void operation3(){
        System.out.println("B类实现了operation3");
    }
}

class D implements Interface1,Interface3 {
    @Override
    public void operation1(){
        System.out.println("D类实现了operation1");
    }
    @Override
    public void operation4(){
        System.out.println("D类实现了operation4");
    }
    @Override
    public void operation5(){
        System.out.println("D类实现了operation5");
    }
}

class A { //A类通过interface1，interface2依赖使用B类，但是只会用到1,2,3方法
    public void depend1 (Interface1 i){
        i.operation1();
    }
    public void depend2 (Interface2 i){
        i.operation2();
    }
    public void depend3 (Interface2 i){
        i.operation3();
    }
}

class C {//A类通过interface1，interface3依赖使用B类，但是只会用到4,5方法
    public void depend1 (Interface1 i){
        i.operation1();
    }
    public void depend4 (Interface3 i){
        i.operation4();
    }
    public void depend5 (Interface3 i){
        i.operation5();
    }
}